import Vue from 'vue'
import Vuex from 'vuex'
import { auInfo } from '@/api/my.js'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    /* vuex定义相应变量 */
    userInfo: '',
    isLogin: false
  },
  mutations: {
    /* vuex定义保存用户信息方法*/
    setUserInfo (state, value) {
      state.userInfo = value
    },
    /* 登录状态的变量 */
    setLoginStatus (state, value) {
      state.isLogin = value
    },

    /* 修改userInfo内的数据  vuex中定义一个方法用于修改收藏数组  */
    setUserInfoOther (state, obj) {
      // {key:'collectArticles',value:value}
      state.userInfo[obj.key] = obj.value
      //改造修改userInfo的方法
      // state.userInfo.collectArticles = value
      // state.userInfo.starArticles = value
    }

    /* 课堂小练习 */
    // mutations是唯一修改state数据的方式
    // 修改state数据只限同步修改
    // setUser (state, value) {
    //   state.userInfo = value
    // }
  },
  actions: {
    /* 课堂练习 */
    /* 异步修改数据 */
    // store是一个固定参数 不需要传值
    // setUserInfo (store, value) {
    //   setTimeout(() => {
    //     store.commit('setUser', value)
    //   }, 2000)
    //   window.console.log(store.state.userInfo)
    // }
    //触发actions方法 this.$store.dispatch("setUerInfo")
    //action:用于异步处理,常用于异步操作后修改state数据(通过mutations修改数据)
    //触发action this.$store.dispatch("setUserInfo",参数)

    /* 刷新用户信息方法 */
    async refreshUserInfo (store) {
      // store是固定参数
      const res = await auInfo()
      store.commit('setUserInfo', res.data.data)
    },   
  },

   /* getters:依赖一个或多个值(state的值)产生一个新的值,可以当属性使用 */
    getters: {
        getCollectTotal(state){
          return state.userInfo===''?0:state.userInfo.collectQuestions.length
        },


      //定义
      getUserInfo (state) {
        return state.userInfo
      },
      //获取当前用户的是否收藏某文章
      getCollect (state) {
        return id => {
          return state.isLogin && state.userInfo.collectArticles.includes(id)
        }
        //调用;this.$store.getters.getUserInfo
      }
    },
  modules: {}
})
